package cn.yza.设计模式.装饰者模式.eg1;

/** 装饰者模式测试类
 *
 *  优点：
 *      -->>>1、装饰者模式和继承关系的目的都是要扩展对象的功能，但是装饰模式可以提供比继承更多的灵活型。
 *          2、通过使用不同的具体装饰者类及它们不同的组合顺序，可以得到不同装饰后具有不同行为或者状态的对象。
 *          例如上面的CarDecoratorImpl可以多次修饰一个男人，证明他有很多车。
 *          3、符合开闭原则。
 *  缺点：
 *     -->>> 1、增加了抽象装饰者类和具体装饰者类，一定程度增加了系统的复杂度，加大了系统的学习和理解成本。
 *          2、灵活性也意味着更容易出错，对于多次被多次修饰的对象，调试时寻找错误可能需要找到多个地方。
 * @author Honglixi
 * @create 2021-11-02 13:37
 */
public class DecoratorTest {
    public static void main(String[] args) {
        Man man = new NormalMan("张三");
        Man man1 = new CarDecoratorImpl(man);
        Man man2 = new HouseDecoratorImpl(man1);
        Man man3 = new DepositDecoratorImpl(man2);
        System.out.println("层层装饰:");
//        man1.getManDesc();
//        man2.getManDesc();
        man3.getManDesc();
        System.out.println();

//        Man man4 = new CarDecoratorImpl()

//        System.out.println("重复装饰（有两个'有存款'）:");
//        Man man4 = new DepositDecoratorImpl(man3);
//        man4.getManDesc();
//        System.out.println();
//
//        System.out.println("任意修饰:");
//        Man man5 = new QualityDecoratorImpl(man1);
//        man5.getManDesc();
//        System.out.println();
//
//        System.out.println("直接得到修饰结果:");
//        Man man6 = new HouseDecoratorImpl(new DepositDecoratorImpl(new NormalMan("李四")));
//        man6.getManDesc();
//        System.out.println();

    }
}
